<?php
require("app/AppException.php");

require("model/Persona.php");
require("model/Localidad.php");

class class_Persona {
	var $persona;
	var $localidad;
	
	function __construct() {
		$this->persona = new Persona();
		$this->localidad = new Localidad();
	}
	
	public function method_getLocalidades($params, $error){
		try{
			$localidades = $this->localidad->getAll();
			return $localidades;
		}catch(Exception $x){
			$error->SetError(JsonRpcError_Unknown, "Error al obtener los planes del titular");
			return $error;
		}
	}
	
	public function method_getLocalidad($params, $error){
		try{
			$idLocalidad = $params[0];
			$localidad = $this->localidad->getOwn($idLocalidad, null);
			return $localidad;
		}catch (Exception $x){
			$error->SetError(JsonRpcError_Unknown, "Error al obtener una persona");
			return $error;
		}
	}

	public function method_getPersonas($params, $error) {
		try{
			$filter = $params[0]->criteria;
			$personas = $this->persona->getAll($filter);
			return $personas;
		}catch (Exception $x){
			$error->SetError(JsonRpcError_Unknown, "Error al obtener las personas");
			return $error;
		}
	}

	public function method_getPersona($params, $error){
		try{
			$idPersona = $params[0];
			$persona = $this->persona->getOwn($idPersona, null);
			return $persona;
		}catch (Exception $x){
			$error->SetError(JsonRpcError_Unknown, "Error al obtener una persona");
			return $error;
		}
	}

	public function method_insertPersona($params, $error){
		try{
			$persona = $params[0];
			if ($this->persona->existsDni($persona->dni)){
				throw new AppException("Ya existe una persona con el mismo dni");
			}
			return $this->persona->insert($persona);
		}catch(AppException $appX){
			$error->SetError(JsonRpcError_Origin_Application, $appX->getMessage());
			return $error;
		}catch(Exception $x){
			$error->SetError(JsonRpcError_Unknown, "Error al insertar la persona");
			return $error;
		}
	}

	public function method_deletePersona($params,$error){
		try{
			$idPersona = $params[0];
			return $this->persona->delete($idPersona);
		} catch(Exception $x){
			$error->SetError(JsonRpcError_Unknown, "Error al eliminar la persona");
			return $error;
		}
	}

	public function method_editPersona($params,$error){
		try{
			$persona = $params[0];
			return $this->persona->edit($persona);
		}catch(AppException $appX){
			$error->SetError(JsonRpcError_Origin_Application, $appX->getMessage());
			return $error;
		}catch(Exception $x){
			$error->SetError(JsonRpcError_Unknown, "Error al editar la persona");
			return $error;
		}
	}
}
?>